# 性能优化技巧 ***Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.*** --- # 概述 本文档介绍Quectel Pi H1智能主控板的系统性能优化技巧,涵盖内核配置、系统调优、应用程序优化等多个方面。通过合理的优化策略,可以显著提升系统的响应速度、吞吐量和能效比。 # 环境准备 在使用性能分析工具之前,需要先配置系统环境。 ## 终端环境配置 ### TERM环境变量 某些工具(如 *perf report*、*perf top*)需要TERM环境变量: ```bash # 临时设置(当前会话有效)export TERM=xterm-256color # 永久设置(添加到.bashrc)echo 'export TERM=xterm-256color' >> ~/.bashrc source ~/.bashrc # 验证设置echo $TERM ``` ## perf工具权限配置 为了获得更详细的内核性能数据,需要调整perf相关权限: ```bash # 查看当前权限设置cat /proc/sys/kernel/kptr_restrict cat /proc/sys/kernel/perf_event_paranoid # 临时配置(重启后失效)echo 0 > /proc/sys/kernel/kptr_restrict echo -1 > /proc/sys/kernel/perf_event_paranoid # 永久配置cat >> /etc/sysctl.conf << 'EOF' # perf性能分析工具配置 kernel.kptr_restrict = 0 kernel.perf_event_paranoid = -1 EOF# 应用配置 sysctl -p ``` **参数说明**: - *kptr_restrict = 0*:允许读取内核符号地址(用于符号解析) - *perf_event_paranoid = -1*:允许所有用户使用perf的所有功能 ## 软件包安装 安装常用的性能分析工具: ```bash # 更新软件包索引apt update # 安装基础性能工具apt install -y htop sysstat iperf3 # 验证安装htop --version iostat -V iperf3 --version ``` # 性能分析工具 在进行优化之前,需要先使用工具分析系统瓶颈,找到性能问题的根源。 ## 系统性能监控 ### top/htop -进程监控 实时监控系统资源使用情况: ```bash # 安装htop(功能更强大)apt install htop ``` **关键指标**: - CPU使用率(user、system、iowait) - 内存使用率(used、buffers、cache) - 进程优先级和状态 ### vmstat -虚拟内存统计 监控系统整体性能: ```bash # 每秒输出一次,共输出10次vmstat 1 10 ``` **关键指标**: - *si/so*:swap in/out(应该接近0) - *bi/bo*:块设备I/O(block in/out) - *wa*:I/O等待时间百分比 ### iostat - I/O统计 分析磁盘I/O性能: ```bash # 安装sysstatapt install sysstat # 每秒输出一次磁盘统计 iostat -x 1 ``` **关键指标**: - *%util*:设备利用率 - *await*:平均I/O等待时间 - *svctm*:平均服务时间 ### perf -性能分析工具 Linux内核提供的强大性能分析工具: ```bash # 记录系统性能数据(10秒) perf record -a -g sleep 10# 查看报告(需要设置TERM环境变量) perf report # 查看CPU热点(实时显示) perf top# 或使用非交互模式 perf top -n ``` **使用前提**: - 需要设置 *TERM* 环境变量(见"环境准备"章节) - 建议配置perf权限以获得完整的内核符号信息 - 如遇到权限警告,可忽略或按"环境准备"章节配置 **常见警告**: ```plaintext WARNING: Kernel address maps are restricted ``` 这是正常的安全限制,可通过配置 *kernel.kptr_restrict* 解决。 ## 网络性能测试 ### iperf3 -网络带宽测试 测试网络吞吐量: ```bash # 安装iperf3(如未安装)apt install iperf3 # 查看版本 iperf3 --version # 服务端模式(监听) iperf3 -s # 客户端模式(测试10秒) iperf3 -c <服务器IP> -t 10# 双向测试 iperf3 -c <服务器IP> -t 10 --bidir # 使用多个并行流 iperf3 -c <服务器IP> -t 10 -P 4 ``` **测试示例**: ```bash # 在服务器端(192.168.1.100) iperf3 -s # 在客户端 iperf3 -c 192.168.1.100 -t 10 ``` ### ping -网络延迟测试 测试网络延迟和丢包率: ```bash ping -c 100 <目标IP> ``` # 内核优化 ## 内核配置优化 ```bash # 进入内核源码目录并编辑配置cd sources/quectel-src/kernel/qcm6490-idp/kernel-source make menuconfig ``` **关键配置**: - **调度器**:Server(高吞吐)/ Desktop(平衡)/ Low-Latency(实时) - **内存**:启用透明大页(Transparent Hugepage) - **调试**:生产环境禁用所有调试选项 ## 启动优化 ```bash # 禁用不必要的服务 systemctl disable <服务名># 设备树禁用未使用的外设&usb3 { status = "disabled";}; ``` # 系统级优化 ## CPU优化 ```bash # CPU调频策略:performance(性能)/ powersave(省电)/ ondemand(推荐)echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor # CPU亲和性(绑定进程到特定核心) taskset -cp 0-3 ``` ## 内存优化 编辑 */etc/sysctl.conf*: ```toml vm.swappiness = 10 # 降低swap使用vm.dirty_ratio = 10 # 脏页缓存比例vm.dirty_background_ratio = 5vm.min_free_kbytes = 65536 # 最小空闲内存 ``` 启用zram压缩内存: ```bash modprobe zram echo 536870912 > /sys/block/zram0/disksize mkswap /dev/zram0 swapon /dev/zram0 -p 10 ``` ## 存储I/O优化 ```bash # 编辑/etc/fstab添加noatime挂载选项 /dev/mmcblk0p8 / ext4 defaults,noatime,nodiratime 0 1# I/O调度器(deadline适合eMMC,bfq通用)echo deadline > /sys/block/mmcblk0/queue/scheduler # 增加预读缓存echo 2048 > /sys/block/mmcblk0/queue/read_ahead_kb ``` ## 网络优化 编辑 */etc/sysctl.conf*: ```toml net.ipv4.tcp_rmem = 4096 87380 16777216net.ipv4.tcp_wmem = 4096 65536 16777216net.core.netdev_max_backlog = 5000net.ipv4.tcp_fastopen = 3net.ipv4.tcp_tw_reuse = 1 ``` 应用配置:*sysctl -p* # 应用程序优化 ## 编译器优化 ```bash # 编译时使用-O3优化 gcc -O3 -flto program.c -o program # 多线程并行化 gcc -fopenmp -O3 program.c -o program ``` ## 库优化 ```bash # 使用高性能数学库apt install libopenblas-dev # 预链接减少启动时间apt install prelink prelink -amR ``` # 基准测试 ```bash # CPU测试apt install sysbench sysbench cpu --threads=4 --time=60 run # 存储测试dd if=/dev/zero of=/tmp/testfile bs=1M count=1024 conv=fdatasync dd if=/tmp/testfile of=/dev/null bs=1M # I/O测试apt install fio fio --name=test --rw=randwrite --bs=4k --size=1G --runtime=60 ``` # 优化检查清单 - 环境准备:DNS、TERM、perf权限 - 性能分析:htop、iostat、perf、iperf3 - CPU:调频策略(ondemand) - 内存:swappiness、zram - 存储:noatime、I/O调度器 - 网络:TCP/IP参数 - 编译:使用-O3优化 - 禁用不必要的服务 # 常见问题与解决方案 ## 软件包安装问题 ### DNS解析失败 **症状**: ```plaintext Error: Failed to fetch https://mirrors.xxx.xxx/... Temporary failure resolving 'mirrors.xxx.xxx' ``` **解决方案**: ```bash # 1. 检查网络连接ping -c 3 8.8.8.8 # 2. 配置DNScat > /etc/resolv.conf << 'EOF' nameserver 8.8.8.8 nameserver 114.114.114.114 EOF# 3. 测试DNSping -c 3 www.baidu.com # 4. 更新软件源并重试apt update apt install <软件包名> ``` ### 软件包管理器错误 **问题**:使用 *opkg* 命令报错 *command not found* **原因**:Quectel Pi H1使用Linux系统,应使用 *apt* 而非 *opkg*。 **解决方案**: ```bash # 错误用法 opkg install htop# 正确用法apt install htop ``` ## 性能分析工具问题 ### perf报错"TERM needs set" **症状**: ```plaintext # perf report TERM environment variable needs set. # perf top TERM environment variable needs set. ``` **解决方案**: ```bash # 临时设置export TERM=xterm-256color # 永久设置echo 'export TERM=xterm-256color' >> ~/.bashrc source ~/.bashrc # 验证echo $TERM ``` ### perf内核符号警告 **症状**: ```plaintext WARNING: Kernel address maps (/proc/{kallsyms,modules}) are restricted ``` **影响**:无法获取详细的内核符号信息,性能分析不够准确。 **解决方案**: ```bash # 检查当前设置cat /proc/sys/kernel/kptr_restrict cat /proc/sys/kernel/perf_event_paranoid # 临时配置echo 0 > /proc/sys/kernel/kptr_restrict echo -1 > /proc/sys/kernel/perf_event_paranoid # 永久配置cat >> /etc/sysctl.conf << 'EOF' kernel.kptr_restrict = 0 kernel.perf_event_paranoid = -1 EOF sysctl -p ``` ### htop/top中文乱码 **症状**:终端显示中文时出现乱码。 **原因**:终端编码设置问题 **解决方案**: ```bash # 设置localeexport LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 # 或使用英文界面避免乱码export LANG=C # 永久设置echo 'export LANG=en_US.UTF-8' >> ~/.bashrc ``` ## 网络测试问题 ### iperf3命令未找到 **症状**: ```bash bash: iperf3: command not found ``` **解决方案**: ```bash # 安装iperf3apt update apt install iperf3 # 验证安装 iperf3 --version ``` ### iperf3连接失败 **症状**:客户端无法连接到服务器。 **排查步骤**: ```bash # 1. 检查服务器是否启动# 在服务器端 iperf3 -s # 2. 检查网络连通性ping <服务器IP># 3. 检查防火墙# 查看防火墙状态 iptables -L -n # 临时开放iperf3端口(5201) iptables -A INPUT -p tcp --dport 5201 -j ACCEPT # 4. 指定监听地址 iperf3 -s -B 0.0.0.0 ``` ## 系统配置问题 ### sysctl配置不生效 **症状**:修改 */etc/sysctl.conf* 后配置未生效。 **解决方案**: ```bash # 1. 应用配置 sysctl -p # 2. 验证配置 sysctl -a | grep <参数名># 3. 如果仍不生效,检查配置文件语法cat /etc/sysctl.conf # 4. 手动设置测试echo <值> > /proc/sys/<路径> ``` ### 权限被拒绝 **症状**: ```plaintext Permission denied ``` **解决方案**: ```bash # 1. 确认以root用户运行whoami# 2. 切换到rootsudo su - # 或su - # 3. 或使用sudosudo <命令> ``` # 性能问题排查 | **问题** | **诊断工具** | **解决方法** | | --- | --- | --- | | CPU高 | htop、perf top | 找出高CPU进程,优化算法 | | 内存不足 | free、vmstat | 启用zram,检查内存泄漏 | | I/O慢 | iostat | 优化挂载选项,更换调度器 | | 网络延迟 | ping、iperf3 | 调整TCP/IP参数,检查连接 | # 优化原则 > **先测量,再优化,后验证**-不要过早优化! 1. 使用工具找到瓶颈(htop、iostat、perf) 2. 针对瓶颈进行优化 3. 重新测量验证效果 4. 平衡性能、功耗和复杂度 **性能与功耗平衡**: - 性能优先:*echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor* - 平衡模式:*echo ondemand > ...*(推荐) - 省电优先:*echo powersave > ...* # 总结 优化要点: 1. **环境准备**:DNS、TERM、perf权限 2. **性能分析**:使用工具定位瓶颈 3. **系统调优**:CPU、内存、I/O、网络 4. **持续监控**:防止性能退化 # 相关文档 - [内核编译与更新](<../内核编译与更新/内核编译与更新.md>) - [设备树文件说明](<../设备树文件说明/设备树文件说明.md>) - [交叉编译工具链](<../交叉编译工具链/交叉编译工具链.md>) - [远程访问](<../远程访问/远程访问.md>)